/**
 * Kelas Sel 
 * @class Sel
 * @file Sel.h
 * @author M.Hasan
 * @date 8 Maret 2012
 */

#ifndef _Sel_H_
#define	_Sel_H_

#include <iostream>
#include "../Point/Point.h"

using namespace std;

class Sel {
public:
	/**
	 * Konstruktor kelas sel (tanpa parameter)
	 * 
	 */
	Sel();							
	
	/**
	 * Konstruktor kelas sel dengan parameter
	 * 
     * @param x Lokasi dari Sel
     */
	Sel(Point& x);						
	
	/**
	 * Konstruktor kelas sel dengan parameter
	 * 
     * @param x Lokasi dari Sel 
     * @param y Isi dari Sel 
     */
	Sel(Point& x, char y);
	
	/**
	 * Copy Konstruktor dari kelas Sel
	 * 
     * @param x Sel Original
     */
	Sel(const Sel& x);
	
	/**
	 * Destruktor kelas Sel
	 * 
     */
	virtual ~Sel();
	
	/**
	 * Assignment operator kelas Sel
     * @param z Sel Original
     * @return  reference terhadap Sel 
     */
	Sel& operator= (const Sel& z);	
	
	/**
	 * Operator stream output dari kelas Sel
	 * 
     * @param stream Buffer output stream
	 * @param sel Sel 
     */
	friend ostream& operator<< (ostream& stream, const Sel& sel);
	
	/**
	 * Setter atribut lokasi dari kelas Sel
	 * 
     * @param x Lokasi Sel
     */
	void setLocation(Point x);
	
	/**
	 * Setter atribut konten dari kelas Sel
	 *
     * @param y Konten dari Sel
     */
	void setContent(char y);
	
	/**
	 * Getter atribut lokasi dari kelas Sel
	 * 
     * @return Lokasi Sel
     */
	Point getLocation() const;
	
	/**
	 * Getter atribut konten dari kelas Sel
	 *
     * @return Konten dari sel 
     */
	char getContent() const;
	
private:
	static const char defaultcontent = ' ';
	Point location;
	char content;
};


#endif	/* Sel_H */

